iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
自我挑戰組

一個令我自豪的App完成之路系列 第 7

AppDelegate的初介紹 Day7

  • 分享至 

  • xImage
  •  

今天打了疫苗,實在太不舒服了

只好來變成分享今天查到的關於AppDelegate整理


AppDelegate:

  • 設置好第一個VC,也就是RootViewController
  • 設置好App相關的設定跟開始的組件
  • 註冊Push Notification
  • 回應App的生命週期事件,像是進入Background,回到App等...

先來介紹AppDelegate的生命週期事件與SceneDelegate的相關

AppDelegate.swift

// iOS 13以前的AppDelegate
// 現在沒有

func applicationWillResignActive(_ application: UIApplication) {
    //即將變成非活動狀態
		// WillResignActive 將會取消活動
}
func applicationDidEnterBackground(_ application: UIApplication) {
    //已進入後台
}
func applicationWillEnterForeground(_ application: UIApplication) {
    //即將進入前台
}
func applicationDidBecomeActive(_ application: UIApplication) {
    //已進入前台,成为活躍進程
}
func applicationWillTerminate(_ application: UIApplication) {
    //進程终止
}
// 現在還有,原本上面的部分被SceneDelegate取代

// 初始化數據庫,啟動必要服務,註冊通知工作,創建UIWindow

// 執行UIWindow的MakeKeyAndVisible方法,將頁面顯示螢幕上

// AppDelegate中,didFinishLaunchingWithOptions僅負責處理除了UI之外的初始化工作:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }
// 現在iOS 13 之後新增的 在AppDelegate內用來管例SceneDelegate的

// 新建場景,返回場景配置
//系统將調用configurationForConnecting接口,返回UISceneConfiguration對象,創建scene。
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
// 現在iOS 13 之後新增的 在AppDelegate內用來管例SceneDelegate的

//新建場景,返回場景配置
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
    return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}

//場景關閉時調用
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
}

UIApplicationDelegate不再負責UI的生命週期,負責僅是APP的生命週期,包括啟動和中止。


SceneDelegate.swift

// 新建窗口時調用
// 通過app switcher關閉該窗口時調用,至此窗口生命结束。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions){
		guard let _ = (scene as? UIWindowScene) else { return }
    }
func sceneDidDisconnect(_ scene: UIScene){}
func sceneDidBecomeActive(_ scene: UIScene){}
func sceneWillResignActive(_ scene: UIScene){}
func sceneWillEnterForeground(_ scene: UIScene){}
func sceneDidEnterBackground(_ scene: UIScene){}

// WillConnectTo & sceneDidDisconnect以控制場景的新建和關閉。

UISceneSession是管理scene的實例,一个scene對應一個UISceneSession

UISceneSession包含唯一標示和場景的配置細節。


之後的內容會在做更多的補充,但今天就先這樣


參考連結:

iOS13SceneDelegate詳解

Scene Delegate vs. App Delegate Explained

IOS13 SceneDelegate详解

关于iOS 13 SceneDelegate 适配

iOS13SceneDelegate詳解

https://easeapi.com/blog/blog/97-ios13-scene-delegate.html


上一篇
讓UITableView來表演 Day6
下一篇
Delegate的使用法 Day8
系列文
一個令我自豪的App完成之路32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言